# @Time : 2021/4/3 9:58
# @Author : Fioman 
# @Phone : 13149920693
"""
项目用到的配置文件,主要用来保存项目的一些配置,例如是否是调试模式,一些路径配置问题
"""
import sys
import os
# 项目名称
PROJECT_NAME = "jinxiang"

# 使用的数据库名称



DATABASE_NAME = "params_{}".format(PROJECT_NAME)
# 是否是开发者模式
DEVELOP = True if len(sys.argv) >= 2 else False

# 主线程是否在运行的标志
IS_MAIN_ALIVE = False

# 项目的根目录,也就是python目录所在的绝对路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
WEB_PATH = os.path.join(BASE_DIR, "web")
ZMC_LIB_PATH = os.path.join(BASE_DIR, r'dll\zmotion.dll')
AUX_ZMC_LIB_PATH = os.path.join(BASE_DIR, r'dll\zauxdll.dll')
CAMERA_LIB_PATH = os.path.join(BASE_DIR, r"dll\MvCameraControl.dll")

MSG_RECV_PATH = os.path.join(BASE_DIR, r"hd_socket\message_recv.xml")
MSG_SEND_PATH = os.path.join(BASE_DIR, r"hd_socket\message_send.xml")
EAP_SEND_MOCK_PATH = os.path.join(BASE_DIR, r"hd_socket\eap_mock_message_send.xml")

# 图片保存的路径
# 1. 保存AI训练图片的路径
TRAIN_DATASET_DIR = r"D:\raw\raw_ai"
# 2. 保存铡刀标定的图片路径
CUTTER_CAM_CAL_DIR = r"D:\cutter_raw\raw_calc"
# 3. 保存首板的图片路径
FIRST_CUT_BOARD_DIR = r"D:\raw\raw_first_board\cut_line"
# 4. 保存识别成功的图片路径
RAW_OK_DIR = r"D:\raw\raw_ok"
# 5. 保存识别失败的图片路径
RAW_FAIL_DIR = r"D:\raw\raw_fail"
# 6. 保存物料检测未通过的图片路径
RAW_TOTALBOARD_ERROR_DIR = r"D:\raw\raw_totalboard_error"
# 7. 保存铡刀报警的图片路径
CUTTER_RAW_BEGIN_DIR = r"D:\cutter_raw\raw_begin"
# 8. 保存切线图的路径
RAW_CUT_LINE_DIR = r"D:\raw\raw_cut"
# 9. 日志的保存目录
DEBUG_DIR = os.path.join(BASE_DIR, "debug")
# 10. 标定的图片的保存目录
CALIBRATION_DIR = r"D:\raw\raw_calibration"
# 11. 图像拼接使用的目录
IMAGE_JOINT_DIR = r"D:\raw\raw_joint"
# 12. 统计物料宽高的目录
COUNT_BOARD_SIZE_DIR = r"D:\raw\raw_joint\count_board_size"
# 13. 铡刀终点检测的图片保存
CUTTER_RAW_FINAL_DIR = r"D:\cutter_raw\raw_final"
# 14. 铡刀起点检测的结果图片
CUTTER_RAW_BEGIN_RES_DIR = r"D:\cutter_raw\raw_begin_res"
# 15. 铡刀终点检测的结果图片
CUTTER_RAW_FINAL_RES_DIR = r"D:\cutter_raw\raw_final_res"
# 16. 保存文件,界面上点击保存的时候,会将文件,保存到这个目录下
FILE_SAVE_DIR = r"D:\file_save"  # 保存文件的目录
# 17. 数据库备份的目录
DATA_BASE_DUMP_DIR = r"D:\db_data\data_dump"
# 18. 数据库导入的目录
DATA_BASE_IMPORT_DIR = r"D:\db_data\data_import"
# 19. 反转铜箔的保存路径
RAW_OK_DIR_FANZHUAN = r"D:\raw_fanzhuan\raw_ok"
# 20. 反转铜箔首片的切线图
FIRST_CUT_BOARD_DIR_FANZHUAN = r"D:\raw_ranzhuan\raw_first_board\cut_line"
# 21. 反转铜箔首片的尺寸确认ok的图片
SIZE_CHECK_OK_DIR_FANZHUAN = r"D:\raw_fanzhuan\raw_first_board\size_check_ok"
# 22. 反转铜箔识别失败的图片
RAW_FAIL_DIR_FANZHUAN = r"D:\raw_fanzhuan\raw_fail"
# 23. 正常的切线图
RAW_CUT_LINE_DIR_FANZHUAN = r"D:\raw_fanzhuan\raw_cut"
# 24. 正常尺寸确认OK的图片目录
SIZE_CHECK_OK_DIR = r"D:\raw\raw_first_board\size_check_ok"
# 25. 三拼保存识别成功的图片路径
RAW_OK_DIR_THREE = r"D:\raw_three\raw_ok"
# 26. 三拼保存识别失败的图片路径
RAW_FAIL_DIR_THREE = r"D:\raw_three\raw_fail"
# 27. 三拼保存物料检测未通过的图片路径
RAW_TOTALBOARD_ERROR_DIR_THREE = r"D:\raw_three\raw_totalboard_error"
# 28. 三拼保存切线图的路径
RAW_CUT_LINE_DIR_THREE = r"D:\raw_three\raw_cut"
# 29. 三拼铡刀终点检测的图片保存
CUTTER_RAW_FINAL_DIR_THREE = r"D:\cutter_three_raw\raw_final"
# 30. 三拼铡刀起点检测的结果图片
CUTTER_RAW_BEGIN_RES_DIR_THREE = r"D:\cutter_three_raw\raw_begin_res"
# 31. 三拼铡刀终点检测的结果图片
CUTTER_RAW_FINAL_RES_DIR_THREE = r"D:\cutter_three_raw\raw_final_res"
# 32. 单拼保存识别成功的图片路径
RAW_OK_DIR_ONE = r"D:\raw_one\raw_ok"
# 33. 单拼保存识别失败的图片路径
RAW_FAIL_DIR_ONE = r"D:\raw_one\raw_fail"
# 34. 单拼保存物料检测未通过的图片路径
RAW_TOTALBOARD_ERROR_DIR_ONE = r"D:\raw_one\raw_totalboard_error"
# 35. 单拼保存切线图的路径
RAW_CUT_LINE_DIR_ONE = r"D:\raw_one\raw_cut"

# 然后就是项目启动的时候自检,这些路径是否都存在,如果不存在就创建
filePathList = [
    TRAIN_DATASET_DIR,  # 1
    CUTTER_CAM_CAL_DIR,  # 2
    FIRST_CUT_BOARD_DIR,  # 3
    RAW_OK_DIR,  # 4
    RAW_FAIL_DIR,  # 5
    RAW_TOTALBOARD_ERROR_DIR,  # 6
    CUTTER_RAW_BEGIN_DIR,  # 7
    RAW_CUT_LINE_DIR,  # 8
    DEBUG_DIR,  # 9
    CALIBRATION_DIR,  # 10
    IMAGE_JOINT_DIR,  # 11
    COUNT_BOARD_SIZE_DIR,  # 12
    CUTTER_RAW_FINAL_DIR,  # 13
    CUTTER_RAW_BEGIN_RES_DIR,  # 14
    CUTTER_RAW_FINAL_RES_DIR,  # 15
    FILE_SAVE_DIR,  # 16
    DATA_BASE_DUMP_DIR,  # 17
    DATA_BASE_IMPORT_DIR,  # 18
    RAW_OK_DIR_FANZHUAN,
    FIRST_CUT_BOARD_DIR_FANZHUAN,
    SIZE_CHECK_OK_DIR_FANZHUAN,
    RAW_FAIL_DIR_FANZHUAN,
    RAW_CUT_LINE_DIR_FANZHUAN,
    SIZE_CHECK_OK_DIR,
    RAW_OK_DIR_THREE,
    RAW_FAIL_DIR_THREE,
    RAW_TOTALBOARD_ERROR_DIR_THREE,
    RAW_CUT_LINE_DIR_THREE,
    CUTTER_RAW_FINAL_DIR_THREE,
    CUTTER_RAW_BEGIN_RES_DIR_THREE,
    CUTTER_RAW_FINAL_RES_DIR_THREE,
    RAW_OK_DIR_ONE,
    RAW_FAIL_DIR_ONE,
    RAW_TOTALBOARD_ERROR_DIR_ONE,
    RAW_CUT_LINE_DIR_ONE
]
for filePath in filePathList:
    if not os.path.exists(filePath):
        os.makedirs(filePath)

# 和上位机设备通信的参数部分
SERVICE_IP = "19.0.0.150"  # 服务器端IP地址
PORT = 5000  # 端口号
BUFFER_SIZE = 16384  # 设置读取的一次BUFFER_SIZE大小.16K
INITIAL_DATA_FLAG = False  # 通信中发送普通消息
ASK_SEND_FLAG = False  # 设备间隔发送EAP是否存在.
DATETIME_SEND_FLAG = False  # 设备间隔发送EAP设备当前系统时间
DATETIME_SYMC_REPLY_FLAG = False  # 设备回复收到校准系统命令
ORDER_OR_MODE_CHANGE_FLAG = False  # 配方和操作模式发生变化的时候
ORDER_CHANGE = False  # 配方切换或者界面上更改了设备的操作模式的时候,会发送这个消息.
TOTAL_COUNT_FLAG = False
EQUIPMENT_STATUS_CHANGE = False  # 设备状态改变
ALARM_REPORT_FLAG = False  # 设备发生警报上报
TRACE_DATA_REPLY_FLAG = False  # 设备上报点检数据\
RECIPE_MODIFY_FLAG = False  # 配方更改标志位
RECIPE_EXSIT = False  # 配方是否存在
RECIPE_EXSIT_REPLY = False  # 配方是否存在回复
DEVICE_ID = "HD001"
EAP_ONLINE = False  # EAP设备是否在线
EAP_REPLY = False  # EAP设备58秒以内有没有收到回复,如果没有收到回复就将EAP_ONLINE 设置为False.证明服务器断开了,这个时候就要尝试重新连接.
ASK_ARGS = ("Are You There Request", {"user_id": DEVICE_ID, "service_ip": SERVICE_IP}, {"returncode": "0", "returnmessage": ""})
